#include <cstdint>
#include "cuda.h"

#define PI 3.14159265
#define NTHREADS 256
#define NBLOCKS 10

template <class T> 
__global__ void CudaSlice(float contrast, float brightness, float step, int sizeI, int sizeJ, int sizeVol1,
								int sizeVol2, int sizeVol3, short* im, float* mat, unsigned char* colormap, bool transpose,
                                bool interpolate, float2 filterLimits);

template <class T> 
__global__ void CudaRenderedVolume(float contrast, float brightness, float step, int sizeI, int sizeJ, int sizeK, int sizeVol1, 
int sizeVol2, int sizeVol3, unsigned char* volume_out, float* mat, bool interpolate);

__global__ void CudaStack(int dim, uchar3* cuOut, short3** cuImageStack,float* cuAlpha,int sizeI, int sizeJ, bool transpose);

__global__ void CudaTalairachSlice(float contrast, float brightness, float step,int sizeI, int sizeJ, int sizeVol1, 
		int sizeVol2, int sizeVol3, short3* im, float* mat, unsigned char* colormap, float3* cuTalPoints, bool transpose, float* cu_invT);


__device__ float3 Talairach(float3 in, float3 * talairachPoints);